# -*- coding: utf-8 -*-
"""
@Time ： 2022/12/31 22:17
@Auth ： jiraWu
@File ：_urllib3.py
@IDE ：PyCharm
@Motto:人生苦短，我学Python

"""
"""
urllib3模块封装
•urllib3是一个功能强大、条理清晰、用于HTTP客户端的Python库，许
多Python的原生系统已经开始使用urllib3。
•urllib3提供了很多Python标准库里所没有的重要特性，包括：线程安全、
连接池、客户端SSL/TLS验证、文件分部编码上传、协助处理重复请求
和HTTP重定位、支持压缩编码、支持HTTP和SOCKS代理、100%测试
覆盖率等。
"""
from urllib3 import PoolManager
from _xpath import HtmlTree


class Req:
    def __init__(self, url: str, fields=None, headers=None, method: str = 'GET'):
        """
        初始化
        :param url: 请求地址
        :param fields: 参数
        :param headers: 请求头
        :param method: 请求方式 默认GET请求
        """
        if headers is None:
            headers = {}
        if fields is None:
            fields = {}
        self.url = url
        self.fields = fields
        self.headers = headers
        self.method = method

    def __str__(self):
        return f"请求地址【{self.url}】,请求方法【{self.method}】,请求参数【{self.fields}】"

    def send_req(self) -> dict:
        """
        发起请求
        :return: 响应信息
        """
        http = PoolManager()
        resp = http.request(method=self.method, url=self.url, fields=self.fields)
        return {'code': resp.status, 'data': resp.data}

    def write_byte(self, file: str):
        """
        写入二进制
        :param file: 文件名
        :return: None
        """
        with open(file, 'wb') as f:
            resp = self.send_req()
            f.write(resp['data'])


if __name__ == '__main__':
    # url = "http://www.baidu.com"
    # resp = Req(url=url,method='get').send_req()
    # print(resp['data'])
    # ipt = HtmlTree(resp['data']).analysis("//input[@id='su']/@value")[0]  # 取出id为su的value
    # print(ipt)
    # url = 'https://www.httpbin.org/post'
    # fields = {
    #     'name': 'Jack', 'country': '中国', 'age': 30
    # }
    # headers = {
    #     "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
    # }
    # resp = Req(url=url, fields=fields, method='post', headers=headers).send_req()
    # print(resp['data'])
    # url = "https://img-blog.csdnimg.cn/1a1eee0ad74346d1949293560429461b.png"
    url = "https://s0.2mdn.net/simgad/16953149472933881649"
    Req(url=url).write_byte('test1.png')
